home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 5 / BBS in a Box -Volume V (BBS in a Box) (April 1992).iso / Files / Prog / M / MPWGCC (Docs).cpt / Documents / Info / gcc.info-6 < prev    next >
Encoding:
Text File  |  1990-03-14  |  48.6 KB  |  1,150 lines  |  [TEXT/MPS ]

  1. Info file gcc.info, produced by Makeinfo, -*- Text -*- from input
  2. file gcc.texinfo.
  3.  
  4. This file documents the use and the internals of the GNU compiler.
  5.  
  6. Copyright (C) 1988, 1989 Free Software Foundation, Inc.
  7.  
  8. Permission is granted to make and distribute verbatim copies of this
  9. manual provided the copyright notice and this permission notice are
  10. preserved on all copies.
  11.  
  12. Permission is granted to copy and distribute modified versions of
  13. this manual under the conditions for verbatim copying, provided also
  14. that the sections entitled ``GNU General Public License'' and
  15. ``Protect Your Freedom--Fight `Look And Feel''' are included exactly
  16. as in the original, and provided that the entire resulting derived
  17. work is distributed under the terms of a permission notice identical
  18. to this one.
  19.  
  20. Permission is granted to copy and distribute translations of this
  21. manual into another language, under the above conditions for modified
  22. versions, except that the sections entitled ``GNU General Public
  23. License'' and ``Protect Your Freedom--Fight `Look And Feel''' and
  24. this permission notice may be included in translations approved by
  25. the Free Software Foundation instead of in the original English.
  26.  
  27.  
  28. 
  29. File: gcc.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Bit Fields,  Up: RTL
  30.  
  31. Conversions
  32. ===========
  33.  
  34. All conversions between machine modes must be represented by explicit
  35. conversion operations.  For example, an expression which is the sum
  36. of a byte and a full word cannot be written as `(plus:SI (reg:QI 34)
  37. (reg:SI 80))' because the `plus' operation requires two operands of
  38. the same machine mode.  Therefore, the byte-sized operand is enclosed
  39. in a conversion operation, as in
  40.  
  41.      (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
  42.  
  43. The conversion operation is not a mere placeholder, because there may
  44. be more than one way of converting from a given starting mode to the
  45. desired final mode.  The conversion operation code says how to do it.
  46.  
  47. `(sign_extend:M X)'
  48.      Represents the result of sign-extending the value X to machine
  49.      mode M.  M must be a fixed-point mode and X a fixed-point value
  50.      of a mode narrower than M.
  51.  
  52. `(zero_extend:M X)'
  53.      Represents the result of zero-extending the value X to machine
  54.      mode M.  M must be a fixed-point mode and X a fixed-point value
  55.      of a mode narrower than M.
  56.  
  57. `(float_extend:M X)'
  58.      Represents the result of extending the value X to machine mode
  59.      M.  M must be a floating point mode and X a floating point value
  60.      of a mode narrower than M.
  61.  
  62. `(truncate:M X)'
  63.      Represents the result of truncating the value X to machine mode
  64.      M.  M must be a fixed-point mode and X a fixed-point value of a
  65.      mode wider than M.
  66.  
  67. `(float_truncate:M X)'
  68.      Represents the result of truncating the value X to machine mode
  69.      M.  M must be a floating point mode and X a floating point value
  70.      of a mode wider than M.
  71.  
  72. `(float:M X)'
  73.      Represents the result of converting fixed point value X,
  74.      regarded as signed, to floating point mode M.
  75.  
  76. `(unsigned_float:M X)'
  77.      Represents the result of converting fixed point value X,
  78.      regarded as unsigned, to floating point mode M.
  79.  
  80. `(fix:M X)'
  81.      When M is a fixed point mode, represents the result of
  82.      converting floating point value X to mode M, regarded as signed.
  83.      How rounding is done is not specified, so this operation may be
  84.      used validly in compiling C code only for integer-valued operands.
  85.  
  86. `(unsigned_fix:M X)'
  87.      Represents the result of converting floating point value X to
  88.      fixed point mode M, regarded as unsigned.  How rounding is done
  89.      is not specified.
  90.  
  91. `(fix:M X)'
  92.      When M is a floating point mode, represents the result of
  93.      converting floating point value X (valid for mode M) to an
  94.      integer, still represented in floating point mode M, by rounding
  95.      towards zero.
  96.  
  97.  
  98. 
  99. File: gcc.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
  100.  
  101. Declarations
  102. ============
  103.  
  104. Declaration expression codes do not represent arithmetic operations
  105. but rather state assertions about their operands.
  106.  
  107. `(strict_low_part (subreg:M (reg:N R) 0))'
  108.      This expression code is used in only one context: operand 0 of a
  109.      `set' expression.  In addition, the operand of this expression
  110.      must be a `subreg' expression.
  111.  
  112.      The presence of `strict_low_part' says that the part of the
  113.      register which is meaningful in mode N, but is not part of mode
  114.      M, is not to be altered.  Normally, an assignment to such a
  115.      subreg is allowed to have undefined effects on the rest of the
  116.      register when M is less than a word.
  117.  
  118.  
  119. 
  120. File: gcc.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
  121.  
  122. Side Effect Expressions
  123. =======================
  124.  
  125. The expression codes described so far represent values, not actions. 
  126. But machine instructions never produce values; they are meaningful
  127. only for their side effects on the state of the machine.  Special
  128. expression codes are used to represent side effects.
  129.  
  130. The body of an instruction is always one of these side effect codes;
  131. the codes described above, which represent values, appear only as the
  132. operands of these.
  133.  
  134. `(set LVAL X)'
  135.      Represents the action of storing the value of X into the place
  136.      represented by LVAL.  LVAL must be an expression representing a
  137.      place that can be stored in: `reg' (or `subreg' or
  138.      `strict_low_part'), `mem', `pc' or `cc0'.
  139.  
  140.      If LVAL is a `reg', `subreg' or `mem', it has a machine mode;
  141.      then X must be valid for that mode.
  142.  
  143.      If LVAL is a `reg' whose machine mode is less than the full
  144.      width of the register, then it means that the part of the
  145.      register specified by the machine mode is given the specified
  146.      value and the rest of the register receives an undefined value. 
  147.      Likewise, if LVAL is a `subreg' whose machine mode is narrower
  148.      than `SImode', the rest of the register can be changed in an
  149.      undefined way.
  150.  
  151.      If LVAL is a `strict_low_part' of a `subreg', then the part of
  152.      the register specified by the machine mode of the `subreg' is
  153.      given the value X and the rest of the register is not changed.
  154.  
  155.      If LVAL is `(cc0)', it has no machine mode, and X may have any
  156.      mode.  This represents a ``test'' or ``compare'' instruction.
  157.  
  158.      If LVAL is `(pc)', we have a jump instruction, and the
  159.      possibilities for X are very limited.  It may be a `label_ref'
  160.      expression (unconditional jump).  It may be an `if_then_else'
  161.      (conditional jump), in which case either the second or the third
  162.      operand must be `(pc)' (for the case which does not jump) and
  163.      the other of the two must be a `label_ref' (for the case which
  164.      does jump).  X may also be a `mem' or `(plus:SI (pc) Y)', where
  165.      Y may be a `reg' or a `mem'; these unusual patterns are used to
  166.      represent jumps through branch tables.
  167.  
  168. `(return)'
  169.      Represents a return from the current function, on machines where
  170.      this can be done with one instruction, such as Vaxes.  On
  171.      machines where a multi-instruction ``epilogue'' must be executed
  172.      in order to return from the function, returning is done by
  173.      jumping to a label which precedes the epilogue, and the `return'
  174.      expression code is never used.
  175.  
  176. `(call FUNCTION NARGS)'
  177.      Represents a function call.  FUNCTION is a `mem' expression
  178.      whose address is the address of the function to be called. 
  179.      NARGS is an expression which can be used for two purposes: on
  180.      some machines it represents the number of bytes of stack
  181.      argument; on others, it represents the number of argument
  182.      registers.
  183.  
  184.      Each machine has a standard machine mode which FUNCTION must
  185.      have.  The machine description defines macro `FUNCTION_MODE' to
  186.      expand into the requisite mode name.  The purpose of this mode
  187.      is to specify what kind of addressing is allowed, on machines
  188.      where the allowed kinds of addressing depend on the machine mode
  189.      being addressed.
  190.  
  191. `(clobber X)'
  192.      Represents the storing or possible storing of an unpredictable,
  193.      undescribed value into X, which must be a `reg' or `mem'
  194.      expression.
  195.  
  196.      One place this is used is in string instructions that store
  197.      standard values into particular hard registers.  It may not be
  198.      worth the trouble to describe the values that are stored, but it
  199.      is essential to inform the compiler that the registers will be
  200.      altered, lest it attempt to keep data in them across the string
  201.      instruction.
  202.  
  203.      X may also be null--a null C pointer, no expression at all. 
  204.      Such a `(clobber (null))' expression means that all memory
  205.      locations must be presumed clobbered.
  206.  
  207.      Note that the machine description classifies certain hard
  208.      registers as ``call-clobbered''.  All function call instructions
  209.      are assumed by default to clobber these registers, so there is
  210.      no need to use `clobber' expressions to indicate this fact. 
  211.      Also, each function call is assumed to have the potential to
  212.      alter any memory location, unless the function is declared
  213.      `const'.
  214.  
  215.      When a `clobber' expression for a register appears inside a
  216.      `parallel' with other side effects, GNU CC guarantees that the
  217.      register is unoccupied both before and after that insn. 
  218.      Therefore, it is safe for the assembler code produced by the
  219.      insn to use the register as a temporary.  You can clobber either
  220.      a specific hard register or a pseudo register; in the latter
  221.      case, GNU CC will allocate a hard register that is available
  222.      there for use as a temporary.
  223.  
  224.      If you clobber a pseudo register in this way, use a pseudo
  225.      register which appears nowhere else--generate a new one each
  226.      time.  Otherwise, you may confuse CSE.
  227.  
  228.      There is one other known use for clobbering a pseudo register in
  229.      a `parallel': when one of the input operands of the insn is also
  230.      clobbered by the insn.  In this case, using the same pseudo
  231.      register in the clobber and elsewhere in the insn produces the
  232.      expected results.
  233.  
  234. `(use X)'
  235.      Represents the use of the value of X.  It indicates that the
  236.      value in X at this point in the program is needed, even though
  237.      it may not be apparent why this is so.  Therefore, the compiler
  238.      will not attempt to delete previous instructions whose only
  239.      effect is to store a value in X.  X must be a `reg' expression.
  240.  
  241. `(parallel [X0 X1 ...])'
  242.      Represents several side effects performed in parallel.  The
  243.      square brackets stand for a vector; the operand of `parallel' is
  244.      a vector of expressions.  X0, X1 and so on are individual side
  245.      effect expressions--expressions of code `set', `call', `return',
  246.      `clobber' or `use'.
  247.  
  248.      ``In parallel'' means that first all the values used in the
  249.      individual side-effects are computed, and second all the actual
  250.      side-effects are performed.  For example,
  251.  
  252.           (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
  253.                      (set (mem:SI (reg:SI 1)) (reg:SI 1))])
  254.  
  255.      says unambiguously that the values of hard register 1 and the
  256.      memory location addressed by it are interchanged.  In both
  257.      places where `(reg:SI 1)' appears as a memory address it refers
  258.      to the value in register 1 *before* the execution of the insn.
  259.  
  260.      It follows that it is *incorrect* to use `parallel' and expect
  261.      the result of one `set' to be available for the next one.  For
  262.      example, people sometimes attempt to represent a jump-if-zero
  263.      instruction this way:
  264.  
  265.           (parallel [(set (cc0) (reg:SI 34))
  266.                      (set (pc) (if_then_else
  267.                                   (eq (cc0) (const_int 0))
  268.                                   (label_ref ...)
  269.                                   (pc)))])
  270.  
  271.      But this is incorrect, because it says that the jump condition
  272.      depends on the condition code value *before* this instruction,
  273.      not on the new value that is set by this instruction.
  274.  
  275.      Peephole optimization, which takes place in together with final
  276.      assembly code output, can produce insns whose patterns consist
  277.      of a `parallel' whose elements are the operands needed to output
  278.      the resulting assembler code--often `reg', `mem' or constant
  279.      expressions.  This would not be well-formed RTL at any other
  280.      stage in compilation, but it is ok then because no further
  281.      optimization remains to be done.  However, the definition of the
  282.      macro `NOTICE_UPDATE_CC' must deal with such insns if you define
  283.      any peephole optimizations.
  284.  
  285. `(sequence [INSNS ...])'
  286.      Represents a sequence of insns.  Each of the INSNS that appears
  287.      in the vector is suitable for appearing in the chain of insns,
  288.      so it must be an `insn', `jump_insn', `call_insn', `code_label',
  289.      `barrier' or `note'.
  290.  
  291.      A `sequence' RTX never appears in an actual insn.  It represents
  292.      the sequence of insns that result from a `define_expand'
  293.      *before* those insns are passed to `emit_insn' to insert them in
  294.      the chain of insns.  When actually inserted, the individual
  295.      sub-insns are separated out and the `sequence' is forgotten.
  296.  
  297. Three expression codes appear in place of a side effect, as the body
  298. of an insn, though strictly speaking they do not describe side
  299. effects as such:
  300.  
  301. `(asm_input S)'
  302.      Represents literal assembler code as described by the string S.
  303.  
  304. `(addr_vec:M [LR0 LR1 ...])'
  305.      Represents a table of jump addresses.  The vector elements LR0,
  306.      etc., are `label_ref' expressions.  The mode M specifies how
  307.      much space is given to each address; normally M would be `Pmode'.
  308.  
  309. `(addr_diff_vec:M BASE [LR0 LR1 ...])'
  310.      Represents a table of jump addresses expressed as offsets from
  311.      BASE.  The vector elements LR0, etc., are `label_ref'
  312.      expressions and so is BASE.  The mode M specifies how much space
  313.      is given to each address-difference.
  314.  
  315.  
  316. 
  317. File: gcc.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
  318.  
  319. Embedded Side-Effects on Addresses
  320. ==================================
  321.  
  322. Four special side-effect expression codes appear as memory addresses.
  323.  
  324. `(pre_dec:M X)'
  325.      Represents the side effect of decrementing X by a standard
  326.      amount and represents also the value that X has after being
  327.      decremented.  X must be a `reg' or `mem', but most machines
  328.      allow only a `reg'.  M must be the machine mode for pointers on
  329.      the machine in use.  The amount X is decremented by is the
  330.      length in bytes of the machine mode of the containing memory
  331.      reference of which this expression serves as the address.  Here
  332.      is an example of its use:
  333.  
  334.           (mem:DF (pre_dec:SI (reg:SI 39)))
  335.  
  336.      This says to decrement pseudo register 39 by the length of a
  337.      `DFmode' value and use the result to address a `DFmode' value.
  338.  
  339. `(pre_inc:M X)'
  340.      Similar, but specifies incrementing X instead of decrementing it.
  341.  
  342. `(post_dec:M X)'
  343.      Represents the same side effect as `pre_dec' but a different
  344.      value.  The value represented here is the value X has before
  345.      being decremented.
  346.  
  347. `(post_inc:M X)'
  348.      Similar, but specifies incrementing X instead of decrementing it.
  349.  
  350. These embedded side effect expressions must be used with care. 
  351. Instruction patterns may not use them.  Until the `flow' pass of the
  352. compiler, they may occur only to represent pushes onto the stack. 
  353. The `flow' pass finds cases where registers are incremented or
  354. decremented in one instruction and used as an address shortly before
  355. or after; these cases are then transformed to use pre- or
  356. post-increment or -decrement.
  357.  
  358. Explicit popping of the stack could be represented with these
  359. embedded side effect operators, but that would not be safe; the
  360. instruction combination pass could move the popping past pushes, thus
  361. changing the meaning of the code.
  362.  
  363. An instruction that can be represented with an embedded side effect
  364. could also be represented using `parallel' containing an additional
  365. `set' to describe how the address register is altered.  This is not
  366. done because machines that allow these operations at all typically
  367. allow them wherever a memory address is called for.  Describing them
  368. as additional parallel stores would require doubling the number of
  369. entries in the machine description.
  370.  
  371.  
  372. 
  373. File: gcc.info,  Node: Assembler,  Next: Insns,  Prev: IncDec,  Up: RTL
  374.  
  375. Assembler Instructions as Expressions
  376. =====================================
  377.  
  378. The RTX code `asm_operands' represents a value produced by a
  379. user-specified assembler instruction.  It is used to represent an
  380. `asm' statement with arguments.  An `asm' statement with a single
  381. output operand, like this:
  382.  
  383.      asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
  384.  
  385. is represented using a single `asm_operands' RTX which represents the
  386. value that is stored in `outputvar':
  387.  
  388.      (set RTX-FOR-OUTPUTVAR
  389.           (asm_operands "foo %1,%2,%0" "a" 0
  390.                         [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
  391.                         [(asm_input:M1 "g")
  392.                          (asm_input:M2 "di")]))
  393.  
  394. Here the operands of the `asm_operands' RTX are the assembler
  395. template string, the output-operand's constraint, the index-number of
  396. the output operand among the output operands specified, a vector of
  397. input operand RTX's, and a vector of input-operand modes and
  398. constraints.  The mode M1 is the mode of the sum `x+y'; M2 is that of
  399. `*z'.
  400.  
  401. When an `asm' statement has multiple output values, its insn has
  402. several such `set' RTX's inside of a `parallel'.  Each `set' contains
  403. a `asm_operands'; all of these share the same assembler template and
  404. vectors, but each contains the constraint for the respective output
  405. operand.  They are also distinguished by the output-operand index
  406. number, which is 0, 1, ... for successive output operands.
  407.  
  408.  
  409. 
  410. File: gcc.info,  Node: Insns,  Next: Calls,  Prev: Assembler,  Up: RTL
  411.  
  412. Insns
  413. =====
  414.  
  415. The RTL representation of the code for a function is a doubly-linked
  416. chain of objects called "insns".  Insns are expressions with special
  417. codes that are used for no other purpose.  Some insns are actual
  418. instructions; others represent dispatch tables for `switch'
  419. statements; others represent labels to jump to or various sorts of
  420. declarative information.
  421.  
  422. In addition to its own specific data, each insn must have a unique
  423. id-number that distinguishes it from all other insns in the current
  424. function, and chain pointers to the preceding and following insns. 
  425. These three fields occupy the same position in every insn,
  426. independent of the expression code of the insn.  They could be
  427. accessed with `XEXP' and `XINT', but instead three special macros are
  428. always used:
  429.  
  430. `INSN_UID (I)'
  431.      Accesses the unique id of insn I.
  432.  
  433. `PREV_INSN (I)'
  434.      Accesses the chain pointer to the insn preceding I.  If I is the
  435.      first insn, this is a null pointer.
  436.  
  437. `NEXT_INSN (I)'
  438.      Accesses the chain pointer to the insn following I.  If I is the
  439.      last insn, this is a null pointer.
  440.  
  441. The `NEXT_INSN' and `PREV_INSN' pointers must always correspond: if
  442. INSN is not the first insn,
  443.  
  444.      NEXT_INSN (PREV_INSN (INSN)) == INSN
  445.  
  446. is always true.
  447.  
  448. Every insn has one of the following six expression codes:
  449.  
  450. `insn'
  451.      The expression code `insn' is used for instructions that do not
  452.      jump and do not do function calls.  Insns with code `insn' have
  453.      four additional fields beyond the three mandatory ones listed
  454.      above.  These four are described in a table below.
  455.  
  456. `jump_insn'
  457.      The expression code `jump_insn' is used for instructions that
  458.      may jump (or, more generally, may contain `label_ref'
  459.      expressions).  `jump_insn' insns have the same extra fields as
  460.      `insn' insns, accessed in the same way.
  461.  
  462. `call_insn'
  463.      The expression code `call_insn' is used for instructions that
  464.      may do function calls.  It is important to distinguish these
  465.      instructions because they imply that certain registers and
  466.      memory locations may be altered unpredictably.
  467.  
  468.      `call_insn' insns have the same extra fields as `insn' insns,
  469.      accessed in the same way.
  470.  
  471. `code_label'
  472.      A `code_label' insn represents a label that a jump insn can jump
  473.      to.  It contains one special field of data in addition to the
  474.      three standard ones.  It is used to hold the "label number", a
  475.      number that identifies this label uniquely among all the labels
  476.      in the compilation (not just in the current function). 
  477.      Ultimately, the label is represented in the assembler output as
  478.      an assembler label `LN' where N is the label number.
  479.  
  480. `barrier'
  481.      Barriers are placed in the instruction stream after
  482.      unconditional jump instructions to indicate that the jumps are
  483.      unconditional.  They contain no information beyond the three
  484.      standard fields.
  485.  
  486. `note'
  487.      `note' insns are used to represent additional debugging and
  488.      declarative information.  They contain two nonstandard fields,
  489.      an integer which is accessed with the macro `NOTE_LINE_NUMBER'
  490.      and a string accessed with `NOTE_SOURCE_FILE'.
  491.  
  492.      If `NOTE_LINE_NUMBER' is positive, the note represents the
  493.      position of a source line and `NOTE_SOURCE_FILE' is the source
  494.      file name that the line came from.  These notes control
  495.      generation of line number data in the assembler output.
  496.  
  497.      Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
  498.      code with one of the following values (and `NOTE_SOURCE_FILE'
  499.      must contain a null pointer):
  500.  
  501.     `NOTE_INSN_DELETED'
  502.           Such a note is completely ignorable.  Some passes of the
  503.           compiler delete insns by altering them into notes of this
  504.           kind.
  505.  
  506.     `NOTE_INSN_BLOCK_BEG'
  507.     `NOTE_INSN_BLOCK_END'
  508.           These types of notes indicate the position of the beginning
  509.           and end of a level of scoping of variable names.  They
  510.           control the output of debugging information.
  511.  
  512.     `NOTE_INSN_LOOP_BEG'
  513.     `NOTE_INSN_LOOP_END'
  514.           These types of notes indicate the position of the beginning
  515.           and end of a `while' or `for' loop.  They enable the loop
  516.           optimizer to find loops quickly.
  517.  
  518.     `NOTE_INSN_FUNCTION_END'
  519.           Appears near the end of the function body, just before the
  520.           label that `return' statements jump to (on machine where a
  521.           single instruction does not suffice for returning).  This
  522.           note may be deleted by jump optimization.
  523.  
  524.     `NOTE_INSN_SETJMP'
  525.           Appears following each call to `setjmp' or a related
  526.           function.
  527.  
  528.     `NOTE_INSN_LOOP_BEG'
  529.           Appears at the place in a loop that `continue' statements
  530.           jump to.
  531.  
  532.      These codes are printed symbolically when they appear in
  533.      debugging dumps.
  534.  
  535. The machine mode of an insn is normally zero (`VOIDmode'), but the
  536. reload pass sets it to `QImode' if the insn needs reloading.
  537.  
  538. Here is a table of the extra fields of `insn', `jump_insn' and
  539. `call_insn' insns:
  540.  
  541. `PATTERN (I)'
  542.      An expression for the side effect performed by this insn.
  543.  
  544. `INSN_CODE (I)'
  545.      An integer that says which pattern in the machine description
  546.      matches this insn, or -1 if the matching has not yet been
  547.      attempted.
  548.  
  549.      Such matching is never attempted and this field is not used on
  550.      an insn whose pattern consists of a single `use', `clobber',
  551.      `asm', `addr_vec' or `addr_diff_vec' expression.
  552.  
  553. `LOG_LINKS (I)'
  554.      A list (chain of `insn_list' expressions) of previous
  555.      ``related'' insns: insns which store into registers values that
  556.      are used for the first time in this insn.  (An additional
  557.      constraint is that neither a jump nor a label may come between
  558.      the related insns).  This list is set up by the flow analysis
  559.      pass; it is a null pointer until then.
  560.  
  561. `REG_NOTES (I)'
  562.      A list (chain of `expr_list' expressions) giving information
  563.      about the usage of registers in this insn.  This list is set up
  564.      by the flow analysis pass; it is a null pointer until then.
  565.  
  566. The `LOG_LINKS' field of an insn is a chain of `insn_list'
  567. expressions.  Each of these has two operands: the first is an insn,
  568. and the second is another `insn_list' expression (the next one in the
  569. chain).  The last `insn_list' in the chain has a null pointer as
  570. second operand.  The significant thing about the chain is which insns
  571. appear in it (as first operands of `insn_list' expressions).  Their
  572. order is not significant.
  573.  
  574. The `REG_NOTES' field of an insn is a similar chain but of
  575. `expr_list' expressions instead of `insn_list'.  There are several
  576. kinds of register notes, which are distinguished by the machine mode
  577. of the `expr_list', which in a register note is really understood as
  578. being an `enum reg_note'.  The first operand OP of the `expr_list' is
  579. data whose meaning depends on the kind of note.  Here are the kinds
  580. of register note:
  581.  
  582. `REG_DEAD'
  583.      The register OP dies in this insn; that is to say, altering the
  584.      value immediately after this insn would not affect the future
  585.      behavior of the program.
  586.  
  587. `REG_INC'
  588.      The register OP is incremented (or decremented; at this level
  589.      there is no distinction) by an embedded side effect inside this
  590.      insn.  This means it appears in a `post_inc', `pre_inc',
  591.      `post_dec' or `pre_dec' RTX.
  592.  
  593. `REG_EQUIV'
  594.      The register that is set by this insn will be equal to OP at run
  595.      time, and could validly be replaced in all its occurrences by
  596.      OP.  (``Validly'' here refers to the data flow of the program;
  597.      simple replacement may make some insns invalid.)
  598.  
  599.      The value which the insn explicitly copies into the register may
  600.      look different from OP, but they will be equal at run time.
  601.  
  602.      For example, when a constant is loaded into a register that is
  603.      never assigned any other value, this kind of note is used.
  604.  
  605.      When a parameter is copied into a pseudo-register at entry to a
  606.      function, a note of this kind records that the register is
  607.      equivalent to the stack slot where the parameter was passed. 
  608.      Although in this case the register may be set by other insns, it
  609.      is still valid to replace the register by the stack slot
  610.      throughout the function.
  611.  
  612. `REG_EQUAL'
  613.      The register that is set by this insn will be equal to OP at run
  614.      time at the end of this insn (but not necessarily elsewhere in
  615.      the function).
  616.  
  617.      The RTX OP is typically an arithmetic expression.  For example,
  618.      when a sequence of insns such as a library call is used to
  619.      perform an arithmetic operation, this kind of note is attached
  620.      to the insn that produces or copies the final value.  It tells
  621.      the CSE pass how to think of that value.
  622.  
  623. `REG_RETVAL'
  624.      This insn copies the value of a library call, and OP is the
  625.      first insn that was generated to set up the arguments for the
  626.      library call.
  627.  
  628.      Flow analysis uses this note to delete all of a library call
  629.      whose result is dead.
  630.  
  631. `REG_WAS_0'
  632.      The register OP contained zero before this insn.  You can rely
  633.      on this note if it is present; its absence implies nothing.
  634.  
  635. `REG_LIBCALL'
  636.      This is the inverse of `REG_RETVAL': it is placed on the first
  637.      insn of a library call, and it points to the last one.
  638.  
  639.      Loop optimization uses this note to move an entire library call
  640.      out of a loop when its value is constant.
  641.  
  642. `REG_NONNEG'
  643.      The register OP is known to have nonnegative value when this
  644.      insn is reached.
  645.  
  646. For convenience, the machine mode in an `insn_list' or `expr_list' is
  647. printed using these symbolic codes in debugging dumps.
  648.  
  649. The only difference between the expression codes `insn_list' and
  650. `expr_list' is that the first operand of an `insn_list' is assumed to
  651. be an insn and is printed in debugging dumps as the insn's unique id;
  652. the first operand of an `expr_list' is printed in the ordinary way as
  653. an expression.
  654.  
  655.  
  656. 
  657. File: gcc.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
  658.  
  659. RTL Representation of Function-Call Insns
  660. =========================================
  661.  
  662. Insns that call subroutines have the RTL expression code `call_insn'.
  663. These insns must satisfy special rules, and their bodies must use a
  664. special RTL expression code, `call'.
  665.  
  666. A `call' expression has two operands, as follows:
  667.  
  668.      (call (mem:FM ADDR) NBYTES)
  669.  
  670. Here NBYTES is an operand that represents the number of bytes of
  671. argument data being passed to the subroutine, FM is a machine mode
  672. (which must equal as the definition of the `FUNCTION_MODE' macro in
  673. the machine description) and ADDR represents the address of the
  674. subroutine.
  675.  
  676. For a subroutine that returns no value, the `call' RTX as shown above
  677. is the entire body of the insn.
  678.  
  679. For a subroutine that returns a value whose mode is not `BLKmode',
  680. the value is returned in a hard register.  If this register's number
  681. is R, then the body of the call insn looks like this:
  682.  
  683.      (set (reg:M R)
  684.           (call (mem:FM ADDR) NBYTES))
  685.  
  686. This RTL expression makes it clear (to the optimizer passes) that the
  687. appropriate register receives a useful value in this insn.
  688.  
  689. Immediately after RTL generation, if the value of the subroutine is
  690. actually used, this call insn is always followed closely by an insn
  691. which refers to the register R.  This remains true through all the
  692. optimizer passes until cross jumping occurs.
  693.  
  694. The following insn has one of two forms.  Either it copies the value
  695. into a pseudo-register, like this:
  696.  
  697.      (set (reg:M P) (reg:M R))
  698.  
  699. or (in the case where the calling function will simply return
  700. whatever value the call produced, and no operation is needed to do
  701. this):
  702.  
  703.      (use (reg:M R))
  704.  
  705. Between the call insn and this following insn there may intervene
  706. only a stack-adjustment insn (and perhaps some `note' insns).
  707.  
  708. When a subroutine returns a `BLKmode' value, it is handled by passing
  709. to the subroutine the address of a place to store the value.  So the
  710. call insn itself does not ``return'' any value, and it has the same
  711. RTL form as a call that returns nothing.
  712.  
  713.  
  714. 
  715. File: gcc.info,  Node: Sharing,  Prev: Calls,  Up: RTL
  716.  
  717. Structure Sharing Assumptions
  718. =============================
  719.  
  720. The compiler assumes that certain kinds of RTL expressions are
  721. unique; there do not exist two distinct objects representing the same
  722. value.  In other cases, it makes an opposite assumption: that no RTL
  723. expression object of a certain kind appears in more than one place in
  724. the containing structure.
  725.  
  726. These assumptions refer to a single function; except for the RTL
  727. objects that describe global variables and external functions, no RTL
  728. objects are common to two functions.
  729.  
  730.    * Each pseudo-register has only a single `reg' object to represent
  731.      it, and therefore only a single machine mode.
  732.  
  733.    * For any symbolic label, there is only one `symbol_ref' object
  734.      referring to it.
  735.  
  736.    * There is only one `const_int' expression with value zero, and
  737.      only one with value one.
  738.  
  739.    * There is only one `pc' expression.
  740.  
  741.    * There is only one `cc0' expression.
  742.  
  743.    * There is only one `const_double' expression with mode `SFmode'
  744.      and value zero, and only one with mode `DFmode' and value zero.
  745.  
  746.    * No `label_ref' appears in more than one place in the RTL
  747.      structure; in other words, it is safe to do a tree-walk of all
  748.      the insns in the function and assume that each time a
  749.      `label_ref' is seen it is distinct from all others that are seen.
  750.  
  751.    * Only one `mem' object is normally created for each static
  752.      variable or stack slot, so these objects are frequently shared
  753.      in all the places they appear.  However, separate but equal
  754.      objects for these variables are occasionally made.
  755.  
  756.    * When a single `asm' statement has multiple output operands, a
  757.      distinct `asm_operands' RTX is made for each output operand. 
  758.      However, these all share the vector which contains the sequence
  759.      of input operands.  Because this sharing is used later on to
  760.      test whether two `asm_operands' RTX's come from the same
  761.      statement, the sharing must be guaranteed to be preserved.
  762.  
  763.    * No RTL object appears in more than one place in the RTL
  764.      structure except as described above.  Many passes of the
  765.      compiler rely on this by assuming that they can modify RTL
  766.      objects in place without unwanted side-effects on other insns.
  767.  
  768.    * During initial RTL generation, shared structure is freely
  769.      introduced.  After all the RTL for a function has been
  770.      generated, all shared structure is copied by `unshare_all_rtl'
  771.      in `emit-rtl.c', after which the above rules are guaranteed to
  772.      be followed.
  773.  
  774.    * During the combiner pass, shared structure with an insn can
  775.      exist temporarily.  However, the shared structure is copied
  776.      before the combiner is finished with the insn.  This is done by
  777.      `copy_substitutions' in `combine.c'.
  778.  
  779.  
  780. 
  781. File: gcc.info,  Node: Machine Desc,  Next: Machine Macros,  Prev: RTL,  Up: Top
  782.  
  783. Machine Descriptions
  784. ********************
  785.  
  786. A machine description has two parts: a file of instruction patterns
  787. (`.md' file) and a C header file of macro definitions.
  788.  
  789. The `.md' file for a target machine contains a pattern for each
  790. instruction that the target machine supports (or at least each
  791. instruction that is worth telling the compiler about).  It may also
  792. contain comments.  A semicolon causes the rest of the line to be a
  793. comment, unless the semicolon is inside a quoted string.
  794.  
  795. See the next chapter for information on the C header file.
  796.  
  797. * Menu:
  798.  
  799. * Patterns::            How to write instruction patterns.
  800. * Example::             An explained example of a `define_insn' pattern.
  801. * RTL Template::        The RTL template defines what insns match a pattern.
  802. * Output Template::     The output template says how to make assembler code
  803.                           from such an insn.
  804. * Output Statement::    For more generality, write C code to output 
  805.                           the assembler code.
  806. * Constraints::         When not all operands are general operands.
  807. * Standard Names::      Names mark patterns to use for code generation.
  808. * Pattern Ordering::    When the order of patterns makes a difference.
  809. * Dependent Patterns::  Having one pattern may make you need another.
  810. * Jump Patterns::       Special considerations for patterns for jump insns.
  811. * Peephole Definitions::Defining machine-specific peephole optimizations.
  812. * Expander Definitions::Generating a sequence of several RTL insns
  813.                          for a standard operation.
  814.  
  815.  
  816. 
  817. File: gcc.info,  Node: Patterns,  Next: Example,  Prev: Machine Desc,  Up: Machine Desc
  818.  
  819. Everything about Instruction Patterns
  820. =====================================
  821.  
  822. Each instruction pattern contains an incomplete RTL expression, with
  823. pieces to be filled in later, operand constraints that restrict how
  824. the pieces can be filled in, and an output pattern or C code to
  825. generate the assembler output, all wrapped up in a `define_insn'
  826. expression.
  827.  
  828. A `define_insn' is an RTL expression containing four or five operands:
  829.  
  830.   1. An optional name.  The presence of a name indicate that this
  831.      instruction pattern can perform a certain standard job for the
  832.      RTL-generation pass of the compiler.  This pass knows certain
  833.      names and will use the instruction patterns with those names, if
  834.      the names are defined in the machine description.
  835.  
  836.      The absence of a name is indicated by writing an empty string
  837.      where the name should go.  Nameless instruction patterns are
  838.      never used for generating RTL code, but they may permit several
  839.      simpler insns to be combined later on.
  840.  
  841.      Names that are not thus known and used in RTL-generation have no
  842.      effect; they are equivalent to no name at all.
  843.  
  844.   2. The "RTL template" (*note RTL Template::.) is a vector of
  845.      incomplete RTL expressions which show what the instruction
  846.      should look like.  It is incomplete because it may contain
  847.      `match_operand' and `match_dup' expressions that stand for
  848.      operands of the instruction.
  849.  
  850.      If the vector has only one element, that element is what the
  851.      instruction should look like.  If the vector has multiple
  852.      elements, then the instruction looks like a `parallel'
  853.      expression containing that many elements as described.
  854.  
  855.   3. A condition.  This is a string which contains a C expression
  856.      that is the final test to decide whether an insn body matches
  857.      this pattern.
  858.  
  859.      For a named pattern, the condition (if present) may not depend
  860.      on the data in the insn being matched, but only the
  861.      target-machine-type flags.  The compiler needs to test these
  862.      conditions during initialization in order to learn exactly which
  863.      named instructions are available in a particular run.
  864.  
  865.      For nameless patterns, the condition is applied only when
  866.      matching an individual insn, and only after the insn has matched
  867.      the pattern's recognition template.  The insn's operands may be
  868.      found in the vector `operands'.
  869.  
  870.   4. The "output template": a string that says how to output matching
  871.      insns as assembler code.  `%' in this string specifies where to
  872.      substitute the value of an operand.  *Note Output Template::.
  873.  
  874.      When simple substitution isn't general enough, you can specify a
  875.      piece of C code to compute the output.  *Note Output Statement::.
  876.  
  877.   5. Optionally, some "machine-specific information".  The meaning of
  878.      this information is defined only by an individual machine
  879.      description; typically it might say whether this insn alters the
  880.      condition codes, or how many bytes of output it generates.
  881.  
  882.      This operand is written as a string containing a C initializer
  883.      (complete with braces) for the structure type
  884.      `INSN_MACHINE_INFO', whose definition is up to you (*note
  885.      Misc::.).
  886.  
  887.  
  888. 
  889. File: gcc.info,  Node: Example,  Next: RTL Template,  Prev: Patterns,  Up: Machine Desc
  890.  
  891. Example of `define_insn'
  892. ========================
  893.  
  894. Here is an actual example of an instruction pattern, for the
  895. 68000/68020.
  896.  
  897.      (define_insn "tstsi"
  898.        [(set (cc0)
  899.              (match_operand:SI 0 "general_operand" "rm"))]
  900.        ""
  901.        "*
  902.      { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
  903.          return \"tstl %0\";
  904.        return \"cmpl #0,%0\"; }")
  905.  
  906. This is an instruction that sets the condition codes based on the
  907. value of a general operand.  It has no condition, so any insn whose
  908. RTL description has the form shown may be handled according to this
  909. pattern.  The name `tstsi' means ``test a `SImode' value'' and tells
  910. the RTL generation pass that, when it is necessary to test such a
  911. value, an insn to do so can be constructed using this pattern.
  912.  
  913. The output control string is a piece of C code which chooses which
  914. output template to return based on the kind of operand and the
  915. specific type of CPU for which code is being generated.
  916.  
  917. `"rm"' is an operand constraint.  Its meaning is explained below.
  918.  
  919.  
  920. 
  921. File: gcc.info,  Node: RTL Template,  Next: Output Template,  Prev: Example,  Up: Machine Desc
  922.  
  923. RTL Template for Generating and Recognizing Insns
  924. =================================================
  925.  
  926. The RTL template is used to define which insns match the particular
  927. pattern and how to find their operands.  For named patterns, the RTL
  928. template also says how to construct an insn from specified operands.
  929.  
  930. Construction involves substituting specified operands into a copy of
  931. the template.  Matching involves determining the values that serve as
  932. the operands in the insn being matched.  Both of these activities are
  933. controlled by special expression types that direct matching and
  934. substitution of the operands.
  935.  
  936. `(match_operand:M N PRED CONSTRAINT)'
  937.      This expression is a placeholder for operand number N of the
  938.      insn.  When constructing an insn, operand number N will be
  939.      substituted at this point.  When matching an insn, whatever
  940.      appears at this position in the insn will be taken as operand
  941.      number N; but it must satisfy PRED or this instruction pattern
  942.      will not match at all.
  943.  
  944.      Operand numbers must be chosen consecutively counting from zero
  945.      in each instruction pattern.  There may be only one
  946.      `match_operand' expression in the pattern for each operand
  947.      number.  Usually operands are numbered in the order of
  948.      appearance in `match_operand' expressions.
  949.  
  950.      PRED is a string that is the name of a C function that accepts
  951.      two arguments, an expression and a machine mode.  During
  952.      matching, the function will be called with the putative operand
  953.      as the expression and M as the mode argument.  If it returns
  954.      zero, this instruction pattern fails to match.  PRED may be an
  955.      empty string; then it means no test is to be done on the
  956.      operand, so anything which occurs in this position is valid.
  957.  
  958.      CONSTRAINT controls reloading and the choice of the best
  959.      register class to use for a value, as explained later (*note
  960.      Constraints::.).
  961.  
  962.      People are often unclear on the difference between the
  963.      constraint and the predicate.  The predicate helps decide
  964.      whether a given insn matches the pattern.  The constraint plays
  965.      no role in this decision; instead, it controls various decisions
  966.      in the case of an insn which does match.
  967.  
  968.      Most often, PRED is `"general_operand"'.  This function checks
  969.      that the putative operand is either a constant, a register or a
  970.      memory reference, and that it is valid for mode M.
  971.  
  972.      For an operand that must be a register, PRED should be
  973.      `"register_operand"'.  It would be valid to use
  974.      `"general_operand"', since the reload pass would copy any
  975.      non-register operands through registers, but this would make GNU
  976.      CC do extra work, and it would prevent the register allocator
  977.      from doing the best possible job.
  978.  
  979.      For an operand that must be a constant, either PRED should be
  980.      `"immediate_operand"', or the instruction pattern's extra
  981.      condition should check for constants, or both.  You cannot
  982.      expect the constraints to do this work!  If the constraints
  983.      allow only constants, but the predicate allows something else,
  984.      the compiler will crash when that case arises.
  985.  
  986. `(match_dup N)'
  987.      This expression is also a placeholder for operand number N.  It
  988.      is used when the operand needs to appear more than once in the
  989.      insn.
  990.  
  991.      In construction, `match_dup' behaves exactly like
  992.      `match_operand': the operand is substituted into the insn being
  993.      constructed.  But in matching, `match_dup' behaves differently. 
  994.      It assumes that operand number N has already been determined by
  995.      a `match_operand' appearing earlier in the recognition template,
  996.      and it matches only an identical-looking expression.
  997.  
  998. `(match_operator:M N "PREDICATE" [OPERANDS...])'
  999.      This pattern is a kind of placeholder for a variable RTL
  1000.      expression code.
  1001.  
  1002.      When constructing an insn, it stands for an RTL expression whose
  1003.      expression code is taken from that of operand N, and whose
  1004.      operands are constructed from the patterns OPERANDS.
  1005.  
  1006.      When matching an expression, it matches an expression if the
  1007.      function PREDICATE returns nonzero on that expression *and* the
  1008.      patterns OPERANDS match the operands of the expression.
  1009.  
  1010.      Suppose that the function `commutative_operator' is defined as
  1011.      follows, to match any expression whose operator is one of the
  1012.      six commutative arithmetic operators of RTL and whose mode is
  1013.      MODE:
  1014.  
  1015.           int
  1016.           commutative_operator (x, mode)
  1017.                rtx x;
  1018.                enum machine_mode mode;
  1019.           {
  1020.             enum rtx_code code = GET_CODE (x);
  1021.             if (GET_MODE (x) != mode)
  1022.               return 0;
  1023.             return (code == PLUS || code == MULT || code == UMULT
  1024.                     || code == AND || code == IOR || code == XOR);
  1025.           }
  1026.  
  1027.      Then the following pattern will match any RTL expression
  1028.      consisting of a commutative operator applied to two general
  1029.      operands:
  1030.  
  1031.           (match_operator:SI 2 "commutative_operator"
  1032.             [(match_operand:SI 3 "general_operand" "g")
  1033.              (match_operand:SI 4 "general_operand" "g")])
  1034.  
  1035.      Here the vector `[OPERANDS...]' contains two patterns because
  1036.      the expressions to be matched all contain two operands.
  1037.  
  1038.      When this pattern does match, the two operands of the
  1039.      commutative operator are recorded as operands 3 and 4 of the
  1040.      insn.  (This is done by the two instances of `match_operand'.) 
  1041.      Operand 2 of the insn will be the entire commutative expression:
  1042.      use `GET_CODE (operands[2])' to see which commutative operator
  1043.      was used.
  1044.  
  1045.      The machine mode M of `match_operator' works like that of
  1046.      `match_operand': it is passed as the second argument to the
  1047.      predicate function, and that function is solely responsible for
  1048.      deciding whether the expression to be matched ``has'' that mode.
  1049.  
  1050.      When constructing an insn, argument 2 of the gen-function will
  1051.      specify the operation (i.e. the expression code) for the
  1052.      expression to be made.  It should be an RTL expression, whose
  1053.      expression code is copied into a new expression whose operands
  1054.      are arguments 3 and 4 of the gen-function.  The subexpressions
  1055.      of argument 2 are not used; only its expression code matters.
  1056.  
  1057.      There is no way to specify constraints in `match_operator'.  The
  1058.      operand of the insn which corresponds to the `match_operator'
  1059.      never has any constraints because it is never reloaded as a whole.
  1060.      However, if parts of its OPERANDS are matched by `match_operand'
  1061.      patterns, those parts may have constraints of their own.
  1062.  
  1063. `(address (match_operand:M N "address_operand" ""))'
  1064.      This complex of expressions is a placeholder for an operand
  1065.      number N in a ``load address'' instruction: an operand which
  1066.      specifies a memory location in the usual way, but for which the
  1067.      actual operand value used is the address of the location, not
  1068.      the contents of the location.
  1069.  
  1070.      `address' expressions never appear in RTL code, only in machine
  1071.      descriptions.  And they are used only in machine descriptions
  1072.      that do not use the operand constraint feature.  When operand
  1073.      constraints are in use, the letter `p' in the constraint serves
  1074.      this purpose.
  1075.  
  1076.      M is the machine mode of the *memory location being addressed*,
  1077.      not the machine mode of the address itself.  That mode is always
  1078.      the same on a given target machine (it is `Pmode', which
  1079.      normally is `SImode'), so there is no point in mentioning it;
  1080.      thus, no machine mode is written in the `address' expression. 
  1081.      If some day support is added for machines in which addresses of
  1082.      different kinds of objects appear differently or are used
  1083.      differently (such as the PDP-10), different formats would
  1084.      perhaps need different machine modes and these modes might be
  1085.      written in the `address' expression.
  1086.  
  1087.  
  1088. 
  1089. File: gcc.info,  Node: Output Template,  Next: Output Statement,  Prev: RTL Template,  Up: Machine Desc
  1090.  
  1091. Output Templates and Operand Substitution
  1092. =========================================
  1093.  
  1094. The "output template" is a string which specifies how to output the
  1095. assembler code for an instruction pattern.  Most of the template is a
  1096. fixed string which is output literally.  The character `%' is used to
  1097. specify where to substitute an operand; it can also be used to
  1098. identify places where different variants of the assembler require
  1099. different syntax.
  1100.  
  1101. In the simplest case, a `%' followed by a digit N says to output
  1102. operand N at that point in the string.
  1103.  
  1104. `%' followed by a letter and a digit says to output an operand in an
  1105. alternate fashion.  Four letters have standard, built-in meanings
  1106. described below.  The machine description macro `PRINT_OPERAND' can
  1107. define additional letters with nonstandard meanings.
  1108.  
  1109. `%cDIGIT' can be used to substitute an operand that is a constant
  1110. value without the syntax that normally indicates an immediate operand.
  1111.  
  1112. `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
  1113. negated before printing.
  1114.  
  1115. `%aDIGIT' can be used to substitute an operand as if it were a memory
  1116. reference, with the actual operand treated as the address.  This may
  1117. be useful when outputting a ``load address'' instruction, because
  1118. often the assembler syntax for such an instruction requires you to
  1119. write the operand as if it were a memory reference.
  1120.  
  1121. `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
  1122.  
  1123. `%' followed by a punctuation character specifies a substitution that
  1124. does not use an operand.  Only one case is standard: `%%' outputs a
  1125. `%' into the assembler code.  Other nonstandard cases can be defined
  1126. in the `PRINT_OPERAND' macro.  You must also define which punctuation
  1127. characters are valid with the `PRINT_OPERAND_PUNCT_VALID_P' macro.
  1128.  
  1129. The template may generate multiple assembler instructions.  Write the
  1130. text for the instructions, with `\;' between them.
  1131.  
  1132. When the RTL contains two operands which are required by constraint
  1133. to match each other, the output template must refer only to the
  1134. lower-numbered operand.  Matching operands are not always identical,
  1135. and the rest of the compiler arranges to put the proper RTL
  1136. expression for printing into the lower-numbered operand.
  1137.  
  1138. One use of nonstandard letters or punctuation following `%' is to
  1139. distinguish between different assembler languages for the same
  1140. machine; for example, Motorola syntax versus MIT syntax for the
  1141. 68000.  Motorola syntax requires periods in most opcode names, while
  1142. MIT syntax does not.  For example, the opcode `movel' in MIT syntax
  1143. is `move.l' in Motorola syntax.  The same file of patterns is used
  1144. for both kinds of output syntax, but the character sequence `%.' is
  1145. used in each place where Motorola syntax wants a period.  The
  1146. `PRINT_OPERAND' macro for Motorola syntax defines the sequence to
  1147. output a period; the macro for MIT syntax defines it to do nothing.
  1148.  
  1149.  
  1150.